home *** CD-ROM | disk | FTP | other *** search
- package javax.swing.text.html;
-
- import java.util.StringTokenizer;
- import javax.swing.SizeRequirements;
- import javax.swing.text.AttributeSet;
- import javax.swing.text.BoxView;
- import javax.swing.text.CompositeView;
- import javax.swing.text.Element;
- import javax.swing.text.View;
- import javax.swing.text.html.HTML.Attribute;
-
- class FrameSetView extends BoxView {
- String[] children;
- int[] percentChildren;
- int[] absoluteChildren;
- int[] relativeChildren;
- int percentTotals;
- int absoluteTotals;
- int relativeTotals;
-
- public FrameSetView(Element var1, int var2) {
- super(var1, var2);
- if (var2 == 1) {
- this.children = this.parseRowColSpec(Attribute.ROWS);
- } else {
- this.children = this.parseRowColSpec(Attribute.COLS);
- }
-
- this.init();
- }
-
- protected SizeRequirements[] getChildRequests(int var1, int var2) {
- int[] var3 = new int[this.children.length];
- this.spread(var1, var3);
- int var4 = ((CompositeView)this).getViewCount();
- SizeRequirements[] var5 = new SizeRequirements[var4];
-
- for(int var6 = 0; var6 < var4; ++var6) {
- View var7 = ((CompositeView)this).getView(var6);
- if (!(var7 instanceof NoFramesView)) {
- var5[var6] = new SizeRequirements((int)var7.getMinimumSpan(var2), var3[var6], (int)var7.getMaximumSpan(var2), 0.5F);
- } else {
- int var8 = (int)var7.getMinimumSpan(var2);
- int var9 = (int)var7.getPreferredSpan(var2);
- int var10 = (int)var7.getMaximumSpan(var2);
- float var11 = var7.getAlignment(var2);
- var5[var6] = new SizeRequirements(var8, var9, var10, var11);
- }
- }
-
- return var5;
- }
-
- private void init() {
- this.percentChildren = new int[this.children.length];
- this.relativeChildren = new int[this.children.length];
- this.absoluteChildren = new int[this.children.length];
-
- for(int var1 = 0; var1 < this.children.length; ++var1) {
- this.percentChildren[var1] = -1;
- this.relativeChildren[var1] = -1;
- this.absoluteChildren[var1] = -1;
- if (this.children[var1].endsWith("*")) {
- if (this.children[var1].length() > 1) {
- this.relativeChildren[var1] = Integer.parseInt(this.children[var1].substring(0, this.children[var1].length() - 1));
- this.relativeTotals += this.relativeChildren[var1];
- } else {
- this.relativeChildren[var1] = 1;
- ++this.relativeTotals;
- }
- } else if (this.children[var1].indexOf(37) != -1) {
- this.percentChildren[var1] = this.parseDigits(this.children[var1]);
- this.percentTotals += this.percentChildren[var1];
- } else {
- this.absoluteChildren[var1] = Integer.parseInt(this.children[var1]);
- }
- }
-
- if (this.percentTotals > 100) {
- for(int var2 = 0; var2 < this.percentChildren.length; ++var2) {
- if (this.percentChildren[var2] > 0) {
- this.percentChildren[var2] = this.percentChildren[var2] * 100 / this.percentTotals;
- }
- }
-
- this.percentTotals = 100;
- }
-
- }
-
- protected void layoutMajorAxis(int var1, int var2, int[] var3, int[] var4) {
- SizeRequirements.calculateTiledPositions(var1, (SizeRequirements)null, this.getChildRequests(var1, var2), var3, var4);
- }
-
- private int parseDigits(String var1) {
- int var2 = 0;
-
- for(int var3 = 0; var3 < var1.length(); ++var3) {
- char var4 = var1.charAt(var3);
- if (Character.isDigit(var4)) {
- var2 = var2 * 10 + Character.digit(var4, 10);
- }
- }
-
- return var2;
- }
-
- private String[] parseRowColSpec(HTML.Attribute var1) {
- AttributeSet var2 = ((View)this).getElement().getAttributes();
- String var3 = "*";
- if (var2 != null && var2.getAttribute(var1) != null) {
- var3 = (String)var2.getAttribute(var1);
- }
-
- StringTokenizer var4 = new StringTokenizer(var3, ",");
- int var5 = var4.countTokens();
- String[] var6 = new String[var5];
-
- for(int var7 = 0; var7 < var5; ++var7) {
- var6[var7] = var4.nextToken().trim();
- if (var6[var7].equals("100%")) {
- var6[var7] = "*";
- }
- }
-
- return var6;
- }
-
- public void setParent(View var1) {
- super.setParent(var1);
- if (var1 == null) {
- for(int var2 = 0; var2 < ((CompositeView)this).getViewCount(); ++var2) {
- View var3 = ((CompositeView)this).getView(var2);
- var3.setParent((View)null);
- }
- }
-
- }
-
- private void spread(int var1, int[] var2) {
- if (var1 != 0) {
- int var3 = 0;
- int var4 = var1;
-
- for(int var5 = 0; var5 < var2.length; ++var5) {
- if (this.absoluteChildren[var5] > 0) {
- var2[var5] = this.absoluteChildren[var5];
- var4 -= var2[var5];
- }
- }
-
- var3 = var4;
-
- for(int var6 = 0; var6 < var2.length; ++var6) {
- if (this.percentChildren[var6] > 0 && var3 > 0) {
- var2[var6] = this.percentChildren[var6] * var3 / 100;
- var4 -= var2[var6];
- } else if (this.percentChildren[var6] > 0 && var3 <= 0) {
- var2[var6] = var1 / var2.length;
- var4 -= var2[var6];
- }
- }
-
- if (var4 > 0 && this.relativeTotals > 0) {
- for(int var13 = 0; var13 < var2.length; ++var13) {
- if (this.relativeChildren[var13] > 0) {
- var2[var13] = var4 * this.relativeChildren[var13] / this.relativeTotals;
- }
- }
- } else if (var4 > 0) {
- float var7 = (float)(var1 - var4);
- float[] var8 = new float[var2.length];
- var4 = var1;
-
- for(int var9 = 0; var9 < var2.length; ++var9) {
- var8[var9] = (float)var2[var9] / var7 * 100.0F;
- var2[var9] = (int)((float)var1 * var8[var9] / 100.0F);
- var4 -= var2[var9];
- }
-
- int var10 = 0;
-
- while(var4 != 0) {
- if (var4 < 0) {
- int var10002 = var2[var10++]--;
- ++var4;
- } else {
- int var15 = var2[var10++]++;
- --var4;
- }
-
- if (var10 == var2.length) {
- var10 = 0;
- }
- }
- }
-
- }
- }
- }
-